#

| Chapter 16 Where Did I Put That? |

## 16.3 Reordering ls Listings

In the previous tutorial (16.2), I introduced you to several different ways of sorting ls' output, based on file time. There was one constant: ls listings were always from first (most recent) to last, moving (first) down each column and then across the page.

That's often not the most convenient way to look at the world. For example, if you're going to look at a directory with many, many files, it might be easier to list the files across the screen first, and then down. This would be particularly nice if you're using a pager (like pg or more (25.3)) to read the listing. Then the first screenful will show the files at the top of the list. Here's an example:

>     jerry@ora ~/.bin
>     59 % ls -x | pg
>     README        alifile       append        c-w           cgrep
>     crontab       cw            cx            dirtop        distprompter
>     drmm          echoerr       fixsubj       fols          incc
>     incs          maillog       mhadd         mhprofile     pickthis
>     recomp        reheader      replf         rfl           rhno
>     rhyes         rmmer         rn2mh         rtfm          saveart
>     scandrafts    showmult      showpr        tcx           tofrom
>     unshar        weather       which         xmhprint      zfolders
>     zloop         zrefile       zscan

This listing is "alphabetic"-not sorted by time. So README is first in the list (uppercase comes below lowercase), and alifile is next to it. The -x flag makes the output multi-column. BSD doesn't have -x. To get the same sorting order under BSD, pipe ls output through the cols (35.16) script.

Both BSD and System V have the -C option; it sorts filenames down columns instead of across. In fact, -C is the default on BSD when you aren't redirecting the output of ls. If BSD ls detects that it's writing anywhere other than a terminal, it defaults to single-column output, rather than multi-column. Under BSD, you'll need to use -C (or another technique like the cols script or pr -number (35.17)) to get output in columns when you pipe ls output.

The -r option lists the files in reverse order. I find this particularly useful when I'm looking at modification times. Because -t shows files by modification time, newest first - using -tr shows files by modification time, oldest first:

>     jerry@ora ~/.bin
>     61 % ls -tr
>     echoerr       replf         zscan         c-w           dirtop
>     saveart       xmhprint      zrefile       cx            cgrep
>     rtfm          distprompter  reheader      maillog       pickthis
>     README        fixsubj       drmm          rfl           rhyes
>     append        mhadd         incc          showpr        rhno
>     fols          rmmer         tofrom        zloop         crontab
>     mhprofile     rn2mh         scandrafts    unshar        weather
>     recomp        alifile       showmult      tcx
>     incs          zfolders      cw            which

Adding the -u option shows the least recently accessed files first:

>     jerry@ora ~/.bin
>     63 % ls -tur
>     README        maillog       which         mhadd         tofrom
>     alifile       replf         zfolders      crontab       tcx
>     append        reheader      zloop         recomp        showmult
>     cgrep         rhyes         xmhprint      distprompter  mhprofile
>     dirtop        rhno          zscan         cw            rmmer
>     fixsubj       showpr        zrefile       cx            rfl
>     echoerr       scandrafts    drmm          c-w           rtfm
>     fols          saveart       incc          weather
>     incs          unshar        pickthis      rn2mh

- JP, ML

16.2 Finding Oldest or Newest Files with ls -t and ls -u |  | 16.4 List All Subdirectories with ls -R